#ifndef _GORBATRAS_FBXANIMATIONTRANSFORM
#define _GORBATRAS_FBXANIMATIONTRANSFORM

#include "Gorbatras_Library.h"

namespace GC
{	
	class FbxAnimationChannel;	

	class FbxAnimationTransform
	{
		public:			
			//Too long to have one 1 row!
			//Chooses between DQ & Matrix depending on ConverterSettings
			FbxAnimationTransform(	const FbxNode* a_node, 
									const GC::FbxAnimationChannel* a_translation,
									const GC::FbxAnimationChannel* a_rotation,
									const GC::FbxAnimationChannel* a_scale);
			
			const GC::FbxAnimationTransformKey GetTransform() const;			
			const GC::FbxAnimationTransformKey GetScale() const;

			const size_t GetTransformSize() const;
			const size_t GetScaleSize() const;

		private:
			GC::FbxAnimationTransformKey m_transform;
			/// <summary>
			/// This only exists if it's using dual quaternions
			/// </summary>
			GC::FbxAnimationTransformKey m_scale;
			
			//m_transform holds Dual quaternions and m_scale holds the scale
			void CalculateDQTransform(
									const FbxNode* a_node, 
									const GC::FbxAnimationChannel* a_translation, 
									const GC::FbxAnimationChannel* a_rotation,
									const GC::FbxAnimationChannel* a_scale);
			//TODO: IMPLEMENT
			//m_transform holds the matrix,  m_scale is empty
			void CalculateMat4x4Transform(
									const FbxNode* a_node, 
									const GC::FbxAnimationChannel* a_translation, 
									const GC::FbxAnimationChannel* a_rotation,
									const GC::FbxAnimationChannel* a_scale);

			//Returns the animation length based of X amount of FbxAnimationChannel*
			//a_paramCount needs to be set so you tell function what X is.
			const int GetAnimationLength(const int a_paramCount, ...) const;
	};
}

#endif